iT邦幫忙

2023 iThome 鐵人賽

1
DevOps

跟著菜鳥手把手用Docker建立服務系列 第 24

Day24 - 跟菜鳥們一起幫 Docker 做健康檢查

  • 分享至 

  • xImage
  •  

為何要特別介紹Docker的健康檢查,原因是在做 Day21 - 菜鳥們把所學的實作做起來 Docker Compose 篇 的時候,關於depends_on不是想像中,會照著順序起動Service,原因是啟動Service會有時間差的問題,於是用healthcheck來實現我們想要的需求,在介紹Docker Compose 並沒有特別講解healthcheck,於是特別在這一篇做個介紹


Docker healthcheck 提供了以下好處:

  • 保應用程式可用性: 透過定期檢查應用程式的健康狀態,Docker 可以確保應用程式一直處於運行狀態。如果健康檢查失敗,Docker 可以執行相應的操作,例如重新啟動容器
  • 提供更好的監控: 使用 Health Check 可以使得 Docker Daemon 可以更容易地監控和報告容器的狀態。這使得在容器管理和監控工具中能夠更有效地檢測容器的問題
  • 更好的整合到管道: 在持續集成/持續部署 (CI/CD) 流水線中,Health Check 可以用於確保新部署的應用程式實際上正在運行,而不僅僅是容器已經啟動
  • 提高可維護性: 通過確保容器的健康狀態,Docker 可以更快地檢測到應用程式的問題,這有助於提高可維護性,減少應用程式中斷的風險

Docker指令

docker run --health-cmd="mysqladmin ping -h localhost" --health-interval=15s --health-timeout=5s --health-retries=3 mysql

docker-compose.yaml

services:
  mysql-server:
    #..... 
            #mysql-server 相關參數
                                 #.....
    
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 15s
      timeout: 5s
      retries: 3
  • 以Mysql做範例
  • health-cmd、test -> 健康檢查的命令
  • health-interval、interval -> 檢查間隔時間,這裡設定為 15 秒
  • health-timeout、timeout -> 健康檢查命令的超時時間,這裡設定為 5 秒
  • health-retries、retries -> 如果健康檢查命令失敗,Docker 將進行的重試次數,這裡設定為 3 次

當你查看Container狀態時,會有顯示Container是否健康
如果失敗
https://ithelp.ithome.com.tw/upload/images/20240203/20158512AnikSdLbhZ.png
如果成功
https://ithelp.ithome.com.tw/upload/images/20240203/20158512fAPgoaaG2k.png

這邊要特別提到depends_on的基本功能
情境 -> Django Service 啟動前 MySql Service 必須先啟動好

  • Django Service depends_on 設置 MySql service,就算 MySql service 沒啟成功的話,Django Service
  • MySql Service 加入 healthcheck,並且Django Service depends_on 多設置 condition 判斷 MySql Service是否健康,如果健康才真的啟動Django Service 如果不健康就不會啟動Django Service
  • 所以如果單純只用 depends_on 沒配合 healthcheck 的話,Django Service 在處理 MySql Service 可能會出錯,因為沒有確保Django Service 啟動前 MySql Service 必須先啟動好機制

一開始以菜鳥的觀點去介紹簡單的知識給大家,認為healthcheck超過菜鳥的範圍,就不會想去特別介紹,後來透過實作,才發現healthcheck很重要而且應該是基本概念,所以要真正去實作才會知道,所以實作很重要而且會學到更多東西/images/emoticon/emoticon10.gif


上一篇
Day23 - 跟菜鳥們分享我實作 Docker Compose 遇到的問題
下一篇
Day25 - 菜鳥們一起深入探討 Docker - Image Layer 篇
系列文
跟著菜鳥手把手用Docker建立服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言